package ru.susu.algebra.partition.operation;

import ru.susu.algebra.operation.IOperation;
import ru.susu.algebra.partition.Partition;
import ru.susu.algebra.partition.PartitionsFactory;

/**
 * @author akargapolov
 * @since: 03.06.2009
 */
public class IncreaseBiggerElementPartitionOp implements IOperation<Partition>
{

	/**
	 * На входе разбиение и целое число. Число добавляется к наибольшему элементу в разбиении.
	 */
	@Override
	public Partition performOperation(Object... sources)
	{
		Partition partition = (Partition)sources[0];
		Integer add = (Integer)sources[1];
		Integer[] array = partition.getArrayRepresentation();
		if (array.length == 0)
		{
			array = new Integer[1];
			array[0] = add;
		}
		else
		{
			array[array.length - 1] += add;
		}
		return PartitionsFactory.createPartition(array);
	}
}
